﻿using System;

// 定义形状接口
public interface IShape
{
    double Area();       // 计算面积
    bool IsValid();      // 判断形状是否合法
}

// 定义抽象形状类，其他形状类可以继承此类
public abstract class Shape : IShape
{
    public abstract double Area();    // 计算面积的抽象方法
    public abstract bool IsValid();   // 判断形状是否合法的抽象方法
}

// 长方形类
public class Rectangle : Shape
{
    public double Length { get; set; }
    public double Width { get; set; }

    public Rectangle(double length, double width)
    {
        Length = length;
        Width = width;
    }

    // 实现计算面积的方法
    public override double Area()
    {
        return Length * Width;
    }

    // 实现判断长方形是否合法的方法
    public override bool IsValid()
    {
        return Length > 0 && Width > 0;
    }
}

// 正方形类
public class Square : Rectangle
{
    public Square(double side) : base(side, side) { }

    // 正方形的面积计算继承自长方形
    public override double Area()
    {
        return Length * Length; // 或者直接返回 base.Area();
    }

    // 判断正方形是否合法
    public override bool IsValid()
    {
        return Length > 0; // 只需要一个边长大于0即可
    }
}

// 三角形类
public class Triangle : Shape
{
    public double Base { get; set; }
    public double Height { get; set; }

    public Triangle(double baseLength, double height)
    {
        Base = baseLength;
        Height = height;
    }

    // 实现计算三角形面积的方法
    public override double Area()
    {
        return 0.5 * Base * Height;
    }

    // 判断三角形是否合法的方法
    public override bool IsValid()
    {
        return Base > 0 && Height > 0;
    }
}

// 主程序
class Program
{
    static void Main()
    {
        // 创建不同形状的对象
        var rectangle = new Rectangle(5, 3);
        var square = new Square(4);
        var triangle = new Triangle(6, 3);

        // 打印每个形状的合法性、面积
        PrintShapeDetails(rectangle);
        PrintShapeDetails(square);
        PrintShapeDetails(triangle);
    }

    // 打印形状的详细信息
    static void PrintShapeDetails(IShape shape)
    {
        Console.WriteLine($"形状是否合法: {shape.IsValid()}");
        Console.WriteLine($"面积: {shape.Area()}");
        Console.WriteLine();
    }
}